﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Сохранить(Команда)
	
	ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
	
	Если ВыделенныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	КлючиРегистра.Очистить();
	Для Каждого Строка Из ВыделенныеСтроки Цикл
		СтрокаСписка = Элементы.Список.ДанныеСтроки(Строка);
		НоваяСтрока = КлючиРегистра.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСписка);
	КонецЦикла;
		
	ФайлыДляСкачивания = ПодготовитьФайлыНаСервере();
	
	Если ФайлыДляСкачивания.Количество() <> 0 Тогда
		Заголовок = НСтр("ru = 'Выберите каталог для сохранения файлов'");
		ПараметрыДиалога = Новый ПараметрыДиалогаПолученияФайлов(Заголовок, Истина);
		НачатьПолучениеФайловССервера(ФайлыДляСкачивания, ПараметрыДиалога);
	КонецЕсли;
	
КонецПроцедуры 

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ПодготовитьФайлыНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	КлючиРегистра.УзелИнформационнойБазы КАК УзелИнформационнойБазы,
		|	КлючиРегистра.Период КАК Период
		|ПОМЕСТИТЬ ВТ_КлючиРегистра
		|ИЗ
		|	&КлючиРегистра КАК КлючиРегистра
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	Архив.УзелИнформационнойБазы КАК УзелИнформационнойБазы,
		|	Архив.Период КАК Период,
		|	Архив.ПолноеИмяФайла КАК ПолноеИмяФайла,
		|	Архив.НомерПринятогоСообщения КАК НомерПринятогоСообщения,
		|	Архив.Хранилище КАК Хранилище,
		|	Архив.ИмяФайла КАК ИмяФайла,
		|	Архив.РасширениеФайла КАК РасширениеФайла
		|ИЗ
		|	ВТ_КлючиРегистра КАК ВТ_КлючиРегистра
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АрхивСообщенийОбменов КАК Архив
		|		ПО (Архив.УзелИнформационнойБазы = ВТ_КлючиРегистра.УзелИнформационнойБазы)
		|			И (Архив.Период = ВТ_КлючиРегистра.Период)
		|			И (НЕ Архив.ФайлБольше100Мб)";
	
	Запрос.УстановитьПараметр("КлючиРегистра", КлючиРегистра.Выгрузить());
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Результат = Новый Массив;
	
	Пока Выборка.Следующий() Цикл
		
		Если Выборка.ПолноеИмяФайла <> "" Тогда
			ДвоичныеДанные = Новый ДвоичныеДанные(Выборка.ПолноеИмяФайла);	
		Иначе
			ДвоичныеДанные = Выборка.Хранилище.Получить();
		КонецЕсли;
		
		Если ДвоичныеДанные = Неопределено Тогда
			
			Шаблон = НСтр("ru = 'Не обнаружено сообщение №%1 для узла ""%2"" от %3'");
			ТекстСообщения = СтрШаблон(Шаблон,
				Выборка.НомерПринятогоСообщения, 
				Выборка.УзелИнформационнойБазы,
				Выборка.Период);
				
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
			
			Продолжить;
			
		КонецЕсли;
		
		Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
		ИмяФайла = Выборка.ИмяФайла + "." + Выборка.РасширениеФайла;
		Результат.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла, Адрес))
		
	КонецЦикла;
	
	Возврат Результат;

КонецФункции

#КонецОбласти